package br.ufpi.controllers.procedure;

import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;

import br.com.caelum.vraptor.util.test.MockResult;
import br.com.caelum.vraptor.util.test.MockValidator;
import br.ufpi.commons.HttpRequestTest;
import br.ufpi.componets.UserSession;
import br.ufpi.componets.ValidateComponente;
import br.ufpi.controllers.UserController;
import br.ufpi.model.User;
import br.ufpi.model.Enum.EnumPerfil;
import br.ufpi.model.validacao.UsuarioValidacao;
import br.ufpi.repositories.UserRepository;
import br.ufpi.repositories.Implement.UserRepositoryImpl;

public class UsuarioTestProcedure {

	public static UserController newInstanceUsuarioController(
			EntityManager entityManager) {

		HttpServletRequest request = new HttpRequestTest();

		MockResult result = new MockResult();
		MockValidator validator = new MockValidator();
		UserRepositoryImpl UserRepository = new UserRepositoryImpl(
				entityManager);
		UserSession usuarioLogado = new UserSession(UserRepository);
		ValidateComponente validateComponente = new ValidateComponente(
				validator);
		UsuarioValidacao usuarioValidacao = new UsuarioValidacao(validator,
				validateComponente, UserRepository);
		UserController usuarioController = new UserController(result,
				validator, usuarioLogado, validateComponente,
				UserRepository, request, usuarioValidacao);
		return usuarioController;
	}

	public static User newInstaceUsuario(EntityManager entityManager,
			String nome, String email, String senha, String telefone,
			String login, EnumPerfil tipoUsuario) {
		User usuario = new User();
		usuario.getLogin().setEmail(email);
		usuario.setName(nome);
		usuario.getLogin().setPassword(senha);
		usuario.setTelefone(telefone);
		usuario.getLogin().setEnumPerfil(tipoUsuario);
		usuario.getLogin().setNickName(login);
		return usuario;
	}
	public static User newInstaceUsuario(EntityManager entityManager,
			String nome, String email, String senha, String telefone,
			String login) {
		User usuario = new User();
		usuario.getLogin().setEmail(email);
		usuario.setName(nome);
		usuario.getLogin().setPassword(senha);
		usuario.setTelefone(telefone);
		usuario.getLogin().setNickName(login);
		return usuario;
	}

	public static User newInstaceUsuario(EntityManager entityManager,
			String nome, String email, String senha) {
		User usuario = new User();
		usuario.getLogin().setEmail(email);
		usuario.setName(nome);
		usuario.getLogin().setPassword(senha);
		return usuario;
	}

	public static UserRepository newInstanceUserRepository(
			EntityManager entityManager) {
		UserRepository repository = new UserRepositoryImpl(entityManager);
		return repository;
	}

}
